import type { Theme } from '@/types'
import { themeMap } from '@/config/theme'
import { customizeTheme } from '@/utils'
import { initRenderer } from '@/utils/renderer'
import { marked } from 'marked'

/**
 * 将 Markdown 内容渲染成带主题样式的 HTML
 *
 * @param content - Markdown 内容
 * @param options - 渲染选项
 * @param options.theme - 主题名称，默认为 'default'，必须是 themeMap 中已定义的主题
 * @param options.fontFamily - 字体名称，默认为 'default'
 * @param options.fontSize - 字体大小，默认为 '16px'
 * @param options.primaryColor - 主色调，默认为 '#3498db'
 * @param options.citeStatus - 是否开启外链引用，默认为 false
 * @param options.countStatus - 是否统计字数和阅读时间，默认为 false
 * @param options.isUseIndent - 是否开启段落首行缩进，默认为 false
 * @param options.customCss - 自定义 CSS 样式代码（可选）
 * @returns 渲染后的 HTML 字符串
 */
export function renderMarkdown(
  content: string,
  options: {
    theme?: keyof typeof themeMap
    fontFamily?: string
    fontSize?: string
    primaryColor?: string
    citeStatus?: boolean
    countStatus?: boolean
    isUseIndent?: boolean
    customCss?: string
  } = {},
): string {
  // 设置默认选项
  const {
    theme = `default`,
    fontFamily = `default`,
    fontSize = `16px`,
    primaryColor = `#3498db`,
    citeStatus = false,
    countStatus = false,
    isUseIndent = false,
    customCss,
  } = options

  // 获取选定的主题
  const selectedTheme = themeMap[theme]

  // 自定义主题（应用颜色和大小）
  const fontSizeNumber = Number(fontSize.replace(`px`, ``))
  const customizedTheme = customizeTheme(selectedTheme, {
    fontSize: fontSizeNumber,
    color: primaryColor,
  })

  // 初始化渲染器
  const renderer = initRenderer()

  // 设置渲染选项
  renderer.setOptions({
    theme: customizedTheme,
    fonts: fontFamily,
    size: fontSize,
    citeStatus,
    countStatus,
    isUseIndent,
  })

  // 解析前置元数据和内容
  const { content: parsedContent, attributes } = renderer.parseFrontMatterAndContent(content)

  // 构建阅读时间（如果需要）
  let readingTimeHtml = ``
  if (countStatus) {
    const readingTime = renderer.buildReadingTime(parsedContent)
    readingTimeHtml = `
      <div style="color: #888; font-size: 0.9em; margin-bottom: 16px;">
        ~${readingTime.words} 字 · 阅读需要 ${readingTime.text}
      </div>
    `
  }

  // 构建容器并渲染内容
  const markedContent = marked.parse(parsedContent)
  const container = renderer.createContainer(readingTimeHtml + markedContent)

  // 构建脚注（如果有外链引用）
  const footnotes = citeStatus ? renderer.buildFootnotes() : ``

  // 添加自定义 CSS（如果有）
  let customCssHtml = ``
  if (customCss) {
    customCssHtml = `<style>${customCss}</style>`
  }

  // 返回最终的 HTML
  return `${renderer.buildAddition()}${container}${footnotes}${customCssHtml}`
}
